package com.nectech.util;

import com.nectech.constant.Constant;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * @Author: 浅小北
 * @ClassName: MapleStoryFrame
 * @Description: 框架模板
 * @Date: 2021/1/27 10:46
 * @Since: version-1.0
 */
public class MapleStoryFrame extends Frame {
     /**
      * @Author: 浅小北
      * @Description: 自定义初始化窗口的方法
      * @Date: 12:59 2021/1/27
      * @Param: 标题
      * @return:
      */
     public void init() {
         //大小
         this.setSize(Constant.WINDOW_WIDTH,Constant.WINDOW_HEIGHT);
         //位置
         this.setLocation(0,0);
         //可见性
         this.setVisible(true);
         //添加关闭窗口的方法
         this.addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {
                 System.exit(0);
             }
         });
         //设置标题
         this.setTitle(Constant.GAME_TITLE);
         //禁止修改窗口
         this.setResizable(false);
         //显示位置
         this.setLocationRelativeTo(null);
         //logo图片
         this.setIconImage(ImageUtil.getImage("logo"));

         //开启线程
         new MyThread().start();
     }
     /**
      * @Author: 浅小北
      * @Description: 创建线程，使用匿名内部类
      * @Date: 13:05 2021/1/27
      * @Param:
      * @return:
      */
     class MyThread  extends Thread {
         @Override
         public void run() {
             for (;;) {
                 repaint();
                 try {
                     sleep(40);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
         }
     }


      /**
       * @Author: 浅小北
       * @Description: 双缓冲解决图片闪烁问题
       * @Date: 13:05 2021/1/27
       * @Param: 画笔
       * @return:
       */
    // 解决图片闪烁的问题，用双缓冲方法解决闪烁问题
    Image backImg = null;

    // 重写update()方法，在窗口的里层添加一个虚拟的图片
    @Override
    public void update(Graphics g) {
        if (backImg == null) {
            // 如果虚拟图片不存在，创建一个和窗口一样大小的图片
            backImg = createImage(Constant.WINDOW_WIDTH, Constant.WINDOW_HEIGHT);
        }
        // 获取到虚拟图片的画笔
        Graphics backg = backImg.getGraphics();
        Color c = backg.getColor();
        backg.setColor(Color.WHITE);
        backg.fillRect(0, 0, Constant.WINDOW_WIDTH, Constant.WINDOW_HEIGHT);
        backg.setColor(c);
        // 调用虚拟图片的paint()方法，每50ms刷新一次
        paint(backg);
        g.drawImage(backImg, 0, 0, null);
    }
}
